var fs = require('fs');
var path = require('path');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();

var COMMENTS_FILE = path.join(__dirname, 'comments.json');
var VOTES_FILE = path.join(__dirname, 'votes.json');

app.set('port', (process.env.PORT || 80));

app.use('/', express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
	extended: true
}));

// 为每一个响应设置一个响应头
app.use(function(req, res, next) {
	res.setHeader('Access-Control-Allow-Origin', '*');
	res.setHeader('Cache-Control', 'no-cache');
	next();
});

app.get('/api/comments', function(req, res) {
	fs.readFile(COMMENTS_FILE, function(err, data) {
		if(err) {
			console.error(err);
			process.exit(1);
		}
		res.json(JSON.parse(data));
	});
});

app.post('/api/comments', function(req, res) {
	fs.readFile(COMMENTS_FILE, function(err, data) {
		if(err) {
			console.error(err);
			process.exit(1);
		}
		var comments = JSON.parse(data);
		// 1,读取json数据
		// 2，为要添加的评论添加唯一ID
		// 3，将时间作为唯一值
		var newComment = {
			id: Date.now(),
			author: req.body.author,
			text: req.body.text,
		};
		//将新建评论添加到数组中重新写入数组并返回数据
		comments.push(newComment);
		fs.writeFile(COMMENTS_FILE, JSON.stringify(comments, null, 4), function(err) {
			if(err) {
				console.error(err);
				process.exit(1);
			}
			res.json(comments);
		});
	});
});

app.get('/api/votes', function(req, res) {
	fs.readFile(VOTES_FILE, function(err, data) {
		if(err) {
			console.error(err);
			process.exit(1);
		}
		res.json(JSON.parse(data));
	});
});

app.post('/api/votes', function(req, res) {
	fs.readFile(VOTES_FILE, function(err, data) {
		if(err) {
			console.error(err);
			process.exit(1);
		}
		var votes = JSON.parse(data);

		for(var i = 0; i < votes.length; i++) {
			var v = votes[i];
			if(v.id == req.body.id){
				v.num++;
				break;
			}
		}

		fs.writeFile(VOTES_FILE, JSON.stringify(votes, null, 4), function(err) {
			if(err) {
				console.error(err);
				process.exit(1);
			}
			res.json(votes);
		});
	});
});

app.post('/api/addChoice', function(req, res) {
	fs.readFile(VOTES_FILE, function(err, data) {
		if(err) {
			console.error(err);
			process.exit(1);
		}
		var votes = JSON.parse(data);
		// 1,读取json数据
		// 2，为要添加的评论添加唯一ID
		// 3，将时间作为唯一值
		var newVote = {
			id: Date.now(),
			text: req.body.text,
			num: 0
		};
		//将新建添加到数组中重新写入数组并返回数据
		votes.push(newVote);
		fs.writeFile(VOTES_FILE, JSON.stringify(votes, null, 4), function(err) {
			if(err) {
				console.error(err);
				process.exit(1);
			}
			res.json(votes);
		});
	});
});

app.listen(app.get('port'), function() {
	console.log('Server started: http://localhost:' + app.get('port'));
});